package com.day2_链表;

/**
 * 模拟单链表的实现
 * 添加元素方式
 * 头插法（注意判空），它的元素的插入和取出顺序是相反的
 * 尾插法（注意判空）,它可以保证元素的插入和取出顺序一致
 */

//定义节点
class LinkNode{
    int val;
    LinkNode next;

    public LinkNode(int val) {
        this.val = val;
    }
}
//单链表(无头结点)
class LinkList{
    //定义头指针
    LinkNode head;
    //定义尾指针
    LinkNode last;

    public LinkList() {
    }
//    采用尾插法添加元素
    public void addInHead(int val){
        LinkNode newNode=new LinkNode(val);
        //判断头指针是否为空
        if(head==null){
            head=newNode;
        }
        //判断尾指针是否为空
        if(last==null){
            last=newNode;
        }
        else{
            //开始从尾部插入
            last.next=newNode;
            last=newNode;
        }
    }
    //遍历链表
    public void printLinkList(){
        if(head==null){
            System.out.println("此链表为空");
        }
        else{
            LinkNode temp=head;
            while(temp!=null){
                System.out.println(temp.val);
                temp=temp.next;
            }
        }
    }
}





public class SinglyLinkList {
    public static void main(String[] args) {
        LinkList link=new LinkList();
        link.addInHead(1);
        link.addInHead(2);
        link.addInHead(3);
        link.printLinkList();
    }

}
